#ifndef NETWORKDEBUGGING_H
#define NETWORKDEBUGGING_H

#include <QDateTime>
#include <QDoubleValidator>
#include <QMainWindow>
#include <QTcpServer>
#include <QTcpSocket>
#include <QUdpSocket>  // 新增UDP支持

#include "gpsdata.h"
#include <QSerialPort>  // 添加添加串口头文件



namespace Ui
{
class networkDebugging;
}

class networkDebugging : public QMainWindow
{
    Q_OBJECT

public:
    explicit networkDebugging(QWidget *parent = nullptr);
    ~networkDebugging();
    void setSerialPort(QSerialPort *serial);  // 新增：设置串口指针的函数


    QTcpServer *server;
    QUdpSocket *udpSocket;  // UDP套接字


    // 新增：组包并发送GPS数据
    void sendGpsData(const GpsData &data, bool isTcp = true);

public slots:
    void on_newClient_connect();
    void on_readyRead_handler();
    void mdisconnect();
    void mstateChanged(QAbstractSocket::SocketState socketState);

signals:
    void back();//定义一个信号
/*
private slots:
    void on_Connect_clicked();*/

private slots:
    void on_btnListen_clicked();
    //bool serialStatus1  =false;


    void on_btnSaveText_clicked();

    void on_solve_clicked();

    void on_btnSend_clicked();

    void on_ClearImput_clicked();

    void on_btnStopListen_clicked();

    void on_btnLineout_clicked();

    void on_ClearRec_clicked();

    // 新增：TCP/UDP发送按钮槽函数
    void on_SendExternallyUDP_clicked();

    void on_SendExternallyTCP_clicked();

    void on_SendContextToCom_clicked();

    void onUdpDataReceived();

    void initUdpListener();

   // void appendDataToRev(const QString &data);

    void on_AddPoint_clicked();

    void on_ClearPoint_clicked();

protected:
    void paintEvent(QPaintEvent *event) override;

private:
    Ui::networkDebugging *ui;
    GpsData parseNetworkData(const QByteArray &data);

    // 新增：获取目标IP和端口
    QString getTargetIp();
    quint16 getTargetPort();
    // 从解析结果文本提取 GPS 数据的函数
    GpsData parseDisplayedGps(const QString &text);
    //void sendGpsDataAsAscii(const GpsData &data, bool isTcp);
    void onUdpDataReady();


    QSerialPort *serialPort;  // 新增：指向主窗口串口的指针
    //void onSerialReadyRead();  // 串口接收数据处理
    void sendToSerial(const QByteArray &data);
    quint16 calculateCrc16(const QByteArray &data);
    void sendGpsDataAsBinary(const GpsData &data, bool isTcp);
    //void appendDataToRecv(const QString &data); // 添加的方法

    QUdpSocket *udpListener;
    QString binaryToBitString(const QByteArray &binaryData);


    QVector<QPointF> coordinates;
    QDoubleValidator *latitudeValidator;
    QDoubleValidator *longitudeValidator;

    // 坐标范围
    double minLatitude = -90;
    double maxLatitude = 90;
    double minLongitude = -180;
    double maxLongitude = 180;



    // 将经纬度转换为屏幕坐标
    QPointF latLngToScreen(const QPointF &latLng);
};
#endif // NETWORKDEBUGGING_H
